package fr.demos.cinepantin.controleur;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.inject.Inject;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import fr.demos.cinepantin.Film;
import fr.demos.cinepantin.Livre;
import fr.demos.cinepantin.dao.DaoFilm;
import fr.demos.cinepantin.dao.DaoLivre;
import fr.demos.cinepantin.dao.impl.UploadImage;
import fr.demos.cinepantin.dao.interfac.FilmDao;
import fr.demos.cinepantin.dao.interfac.LivreDao;
import fr.demos.cinepantin.dao.interfac.UploadInterface;
import fr.demos.cinepantin.enumerate.Anciennete;
import fr.demos.cinepantin.enumerate.Categorie;
import fr.demos.cinepantin.enumerate.Genre;
import fr.demos.cinepantin.enumerate.SupportFilm;
import fr.demos.cinepantin.enumerate.Tva;
import fr.demos.cinepantin.exception.DaoExceptions;
import fr.demos.cinepantin.exception.UploadImageExceptions;
import fr.demos.cinepantin.exception.UploadImageMauvaisFormatExceptions;
import fr.demos.cinepantin.util.Configuration;

/**
 * @author CQP-DNT
 * Servlet implementation class SaisirDVD
 */
@WebServlet("/SaisirFilm")
public class SaisirFilm extends HttpServlet {
	private static final long serialVersionUID = 1L;
	@Inject
	@DaoFilm
	private FilmDao filmdao;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public SaisirFilm() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher rd;
		request.setAttribute("page", "/saisirFilm.jsp");
		rd = request.getRequestDispatcher("/page.jsp");
		rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		// action pour uploader une image

		String action = request.getParameter("action");

		if (action != null && action.equals("uploadImage")) {
			UploadInterface uploadImage = new UploadImage();
			List<String> listFilesNames;
			try {
				listFilesNames = uploadImage.UploadFile(request);

				for (String fileName : listFilesNames) {
					System.out.println(Configuration
							.getAbsolutePathDossierUploadImage(request)
							+ fileName);
					request.setAttribute("srcImage",
							Configuration.SERVLET_AFFICHER_IMAGE + "?src="
									+ fileName);
				}
			} catch (UploadImageMauvaisFormatExceptions e) {
				System.out.println("problème upload image");
				request.setAttribute("erreurImage",
						"le format de l'image n'est pas reconnu");

			} catch (UploadImageExceptions e) {
				request.setAttribute("erreurImage",
						"Un problème est survenu durant l'upload de l'images");
				// Impossible d'enregistrer l'image
				e.printStackTrace();
			}
			request.setAttribute("page", "/saisirFilm.jsp");
			RequestDispatcher rd = request.getRequestDispatcher("/page.jsp");
			rd.forward(request, response);
		}
		
		/**
		 * Saisir Films
		 */
		String titre = null;
		String realisateur = null;
		String[] acteurs = new String[2];
		SupportFilm supportFilm = null;
		Genre genre = null;
		String resume = null;
		double duree = 0;
		Anciennete anciennete = null;
		int anneeDeSortie = 0;
		Tva tva = null;
		// Categorie categorie = null;
		double prixVente = 0;
		int stock = 0;
		String filmAjouter = titre;

		ArrayList<String> erreurs = new ArrayList<>();

		HttpSession session = request.getSession();
		RequestDispatcher rd = null;

		titre = (String) request.getParameter("titre");
		if (titre == null || titre.equals("")) {
			erreurs.add("Nom du titre requis");
		}

		if (titre != null && titre.length() > 30) {
			erreurs.add("Le titre d�passe la taille du champs");
		}

		try {
			realisateur = (String) request.getParameter("realisateur");
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {
			acteurs[0] = (String) request.getParameter("acteurs[0]");
			acteurs[1] = (String) request.getParameter("acteurs[1]");
		} catch (Exception e) {
			e.printStackTrace();
		}

		try {
			supportFilm = SupportFilm.valueOf(request
					.getParameter("supportFilm"));
		} catch (Exception e) {
			erreurs.add("choissisez le support ");
		}

		try {
			genre = Genre.valueOf(request.getParameter("genre"));
		} catch (Exception e) {
			erreurs.add("choissisez un genre !!!!");
		}

		try {
			resume = (String) request.getParameter("resume");
		} catch (Exception e) {

			e.printStackTrace();
		}

		try {
			duree = Double.parseDouble(request.getParameter("prixVente"));
		} catch (NumberFormatException e) {
			erreurs.add("Veuillez entrez le duree ");
		}

		try {
			anciennete = Anciennete.valueOf(request.getParameter("anciennete"));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			erreurs.add("choissisez l'anciennete");
		}
		try {
			anneeDeSortie = Integer.parseInt(request.getParameter("anneeDeSortie"));
		} catch (NumberFormatException e) {
			e.printStackTrace();
			erreurs.add("veuillez entrer l'année de sorti");
		}
		try {
			tva = Tva.valueOf(request.getParameter("tva"));
		} catch (NullPointerException e) {
			erreurs.add("choissisez une valeur");
		}
//		try {
//			categorie = Categorie.valueOf(request.getParameter("categorie"));
//		} catch (NullPointerException e) {
//			erreurs.add("Categorie obligatoire");
//		}

		try {
			prixVente = Double.parseDouble(request.getParameter("prixVente"));
		} catch (NumberFormatException e) {
			erreurs.add("Vous devez entrer le prix de vente");
		}

		try {
			stock = Integer.parseInt(request.getParameter("stock"));
		} catch (NumberFormatException e) {
			erreurs.add("stock invalide !");
		}

		if (erreurs.size() > 0) {
			request.setAttribute("erreurs", erreurs);
			request.setAttribute("titre", titre);
			request.setAttribute("realisateur", realisateur);
			request.setAttribute("acteurs[0]", acteurs[0]);
			request.setAttribute("acteurs[1]", acteurs[1]);
			request.setAttribute("supportFilm", supportFilm);
			request.setAttribute("genre", genre);
			request.setAttribute("resume", resume);
			request.setAttribute("duree", duree);
			request.setAttribute("anciennete", anciennete);
			request.setAttribute("anneeDeSortie", anneeDeSortie);
			request.setAttribute("tva", tva);
			// request.setAttribute("categorie", categorie);
			request.setAttribute("prixVente", prixVente);
			request.setAttribute("stock", stock);

			request.setAttribute("Création non effectuée dans la base ",
					erreurs);
			request.setAttribute("page", "/saisirFilm.jsp");
		} else {

			Film f = null;
			f = new Film(titre, realisateur, acteurs, supportFilm, genre,resume, duree,
					anciennete, anneeDeSortie, tva, prixVente, stock);

			try {
				filmdao.addFilm(f); // apprenant a ajouter en parametre
				request.setAttribute("Vous venez d'ajouter un film : Titre = "
						+ titre + "dans le base", filmAjouter);
				request.getRequestDispatcher("/AfficherFilm").forward(request,
						response);
			} catch (DaoExceptions e) {
				e.printStackTrace();
				erreurs.add("erreur ajout de ce dvd");
				request.setAttribute("page", "/saisirFilm.jsp");
			}

		}
		rd = request.getRequestDispatcher("/page.jsp");
		rd.forward(request, response);

	}

}
